{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# Numpy简介\n",
    "\n",
    "## 一、Jupyter快捷键\n",
    "\n",
    "- ESC 返回命令模式\n",
    "- a 当前cell上面新建一个cell\n",
    "- b 当前cell下面新建一个cell\n",
    "- dd 删除当前cell\n",
    "- m 切换到markdown模式\n",
    "- y 切换到代码模式\n",
    "- ctrl+enter 运行代码\n",
    "- shift+enter 运行代码并新建shell"
   ],
   "id": "dcdf91d4c7df0223"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "## 二、NumPy\n",
    "\n",
    "NumPy可以操作N维数组（张量）进行数学运算。核心类是ndarray\n",
    "\n",
    "## 三、ndarray张量\n",
    "\n",
    "ndarray张量具有以下特征：\n",
    "\n",
    "- 维度\n",
    "- 所有元素类型相同\n",
    "- 连续存储，计算高效\n",
    "\n",
    "### 3.1 ndarray常用属性\n",
    "\n",
    "- shape 数组形状\n",
    "- ndim 数组维度\n",
    "- size 元素数量\n",
    "- dtype 元素数据类型"
   ],
   "id": "7d0828919f3becab"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T14:49:22.498405Z",
     "start_time": "2025-11-14T14:49:22.475167Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "\n",
    "arr = np.arange(1, 5).reshape(2, 2)\n",
    "arr"
   ],
   "id": "b1f6a71fc2863f5f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2],\n",
       "       [3, 4]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 22
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T14:49:24.789260Z",
     "start_time": "2025-11-14T14:49:24.771219Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 形状      # 维度      # 元素总数 # 数据类型\n",
    "arr.shape, arr.ndim, arr.size, arr.dtype"
   ],
   "id": "1627705401479262",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((2, 2), 2, 4, dtype('int32'))"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 23
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "### 3.2 其他属性\n",
    "\n",
    "- T 转置\n",
    "- itemsize 单个元素所需内存空间字节数\n",
    "- nbytes 数组所需内存大小"
   ],
   "id": "b3f44b40c7682cef"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T14:49:28.509601Z",
     "start_time": "2025-11-14T14:49:28.495438Z"
    }
   },
   "cell_type": "code",
   "source": "arr, arr.T, arr.itemsize, arr.nbytes",
   "id": "2fcdfd6f0f32cc4c",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[1, 2],\n",
       "        [3, 4]]),\n",
       " array([[1, 3],\n",
       "        [2, 4]]),\n",
       " 4,\n",
       " 16)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 24
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 3.3 创建ndarray张量",
   "id": "2425af19965dc2ae"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:04:10.408675Z",
     "start_time": "2025-11-14T15:04:10.388245Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 通过python列表创建\n",
    "my_list = list(range(4))\n",
    "         # 将list转换为ndarray # 深拷贝\n",
    "my_list, np.array(my_list), np.copy(my_list)"
   ],
   "id": "fa6d418038a0b797",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([0, 1, 2, 3], array([0, 1, 2, 3]), array([0, 1, 2, 3]))"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 29
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "#### 3.3.1 特殊张量",
   "id": "1eb53bc0ffb10c89"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:11:33.327439Z",
     "start_time": "2025-11-14T15:11:33.317936Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 预定义形状的数组\n",
    "# 0数组            # 1数组\n",
    "np.zeros((2, 3)), np.ones((2, 3))"
   ],
   "id": "3af6f21a8b32adae",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[0., 0., 0.],\n",
       "        [0., 0., 0.]]),\n",
       " array([[1., 1., 1.],\n",
       "        [1., 1., 1.]]),\n",
       " array([[1., 1., 1.],\n",
       "        [1., 1., 1.]]))"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 33
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:13:01.777672Z",
     "start_time": "2025-11-14T15:13:01.765194Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 空数组（默认填充的元素是在内存中随机取的）\n",
    "np.empty((2, 3))"
   ],
   "id": "a64d3e03c85579df",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 1., 1.],\n",
       "       [1., 1., 1.]])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 34
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:13:30.249410Z",
     "start_time": "2025-11-14T15:13:30.242207Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 固定值数组\n",
    "np.full((2, 3), 5)"
   ],
   "id": "451173bca3e0378b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[5, 5, 5],\n",
       "       [5, 5, 5]])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 35
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "#### 3.3.2 行向量",
   "id": "73a2395a5a7d80d8"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:36:04.509945Z",
     "start_time": "2025-11-14T15:36:04.494415Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 等差序列（左闭右开区间）\n",
    "np.arange(0, 10, 2)"
   ],
   "id": "ecd9d0adc478e64b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 2, 4, 6, 8])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 38
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:36:52.125952Z",
     "start_time": "2025-11-14T15:36:52.113775Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 线性等间隔序列（闭区间）\n",
    "np.linspace(0, 10, 5)"
   ],
   "id": "606479939a4f4ec0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0. ,  2.5,  5. ,  7.5, 10. ])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 41
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:40:07.434460Z",
     "start_time": "2025-11-14T15:40:07.427490Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 对数等间隔序列\n",
    "np.logspace(0, 2, 3, base=10)"
   ],
   "id": "4a4339d6b15006f1",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1.,  10., 100.])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 44
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "#### 3.3.3 单位矩阵和对焦矩阵",
   "id": "d43faa38bc100578"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:40:55.622539Z",
     "start_time": "2025-11-14T15:40:55.607406Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 单位矩阵   # 对焦矩阵\n",
    "np.eye(3), np.diag([1, 2, 3])"
   ],
   "id": "a260c00ad753031a",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[1., 0., 0.],\n",
       "        [0., 1., 0.],\n",
       "        [0., 0., 1.]]),\n",
       " array([[1, 0, 0],\n",
       "        [0, 2, 0],\n",
       "        [0, 0, 3]]))"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 47
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "#### 3.3.4 随机数张量",
   "id": "4ed2490abc53d7a"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:46:57.909467Z",
     "start_time": "2025-11-14T15:46:57.895334Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 均匀分布随机数\n",
    "np.random.rand(2, 2)"
   ],
   "id": "faba720efb460204",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.41461893, 0.39998009],\n",
       "       [0.98340563, 0.51584504]])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 49
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:47:33.865164Z",
     "start_time": "2025-11-14T15:47:33.848887Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 标准正态分布随机数\n",
    "np.random.randn(2, 2)"
   ],
   "id": "66890e1d8e9173b2",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.37000399, -0.22229961],\n",
       "       [ 0.09919076, -0.22161559]])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 51
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T15:48:37.363171Z",
     "start_time": "2025-11-14T15:48:37.347691Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 随机整数（左闭右开区间）\n",
    "np.random.randint(0, 10, (2, 2))"
   ],
   "id": "6db95bde81940fa",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2, 3],\n",
       "       [1, 6]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 69
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "### 3.4 数据类型\n",
    "\n",
    "### 3.5 索引和切片\n",
    "\n",
    "### 3.6 数学运算和广播机制\n",
    "\n",
    "### 3.7 线性代数运算"
   ],
   "id": "9fd04f7b62b5f566",
   "attachments": {
    "0cc30e0b-7147-4c21-937c-08860a5459d0.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAABEIAAALaCAIAAAC6RWE6AAAPMElEQVR4Xu3XwQnAMAwEQfdfZAikkfjtDtaa4VoQaNfzfmajtgAAqPPVAQAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTsjDEbtfMGAADI8dUBAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAjIwBAABiZAwAABAjYwAAgBgZAwAAxMgYAAAgRsYAAAAxMgYAAIiRMQAAQIyMAQAAYmQMAAAQI2MAAIAYGQMAAMTIGAAAIEbGAAAAMTIGAACIkTEAAECMjAEAAGJkDAAAECNjAACAGBkDAADEyBgAACBGxgAAADEyBgAAiJExAABAzM4Ys1E7bwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7xA5ha2jlZZGBGAAAAAElFTkSuQmCC"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
